<?php
class Serie extends AppModel {
	var $name = 'Serie';
	
	
	/**
	 * @return un array => respuesta, Serie - numero, numero, serie
	 * @param $buscarPorCampo Object => campo de la tabla tqcserie por el cual se realizara la busqueda
	 * @param $valorCampo Object => valor que debe tener el campo elejido para la busqueda
	 * @param $criterioBusqueda Object[optional] => un criterio para distinguir campos iguales
	 * @param $tipoDocumento Object[optional] => el tipo documento al cual se refiere
	 */
	function actualizarNumeracion($buscarPorCampo, $valorCampo, $criterioBusqueda = null, $tipoDocumento_id = null){
		if(empty($criterioBusqueda) && empty($tipoDocumento_id)){
			return 	array('respuesta'=>false, 'mensaje'=>"FALLO AL INICIALIZAR LA NUMERACION - SERIE");
		} 
		
		if(!empty($criterioBusqueda) && !empty($tipoDocumento_id)){
			$conditions = array($buscarPorCampo=>$valorCampo, 'criteriobusqueda'=>$criterioBusqueda, 'tipodocumento_id'=>$tipoDocumento_id);
		}elseif(empty($criterioBusqueda)){
			$conditions = array($buscarPorCampo=>$valorCampo, 'tipodocumento_id'=>$tipoDocumento_id);
		}else{
			$conditions = array($buscarPorCampo=>$valorCampo, 'criteriobusqueda'=>$criterioBusqueda);
		}
		
		$numeroActual = $this->find('first',array('conditions'=>$conditions, 'fields'=>array('id', 'serie', 'ultimonumero', 'longitudnumero'), 'recursive'=>-1));
		if(empty($numeroActual))  return array('respuesta'=>false, 'mensaje'=>"NO SE ENCONTRO LA SERIE");

		$numevoNumero = $this->incrementarNumeracion($numeroActual['Serie']['ultimonumero'], $numeroActual['Serie']['longitudnumero']);
		
		//actualizando la numeracion
		$this->id = $numeroActual['Serie']['id'];
		if(!$this->saveField('ultimonumero', $numevoNumero)){
			return array('respuesta'=>false, 'mensaje'=>__('NUMERO NO ACTUALIZADO', true));
		}
		
		//verificamos si tiene alguna serie
		if(!empty($numeroActual['Serie']['serie'])){
			$numevoNumeroSerie = trim($numeroActual['Serie']['serie'])."-".$numevoNumero;
		}else{
			$numevoNumeroSerie = $numevoNumero;
		}
		
		return array('respuesta'=>true, 'mensaje'=>'SERIE ACTUALIZADA','numero_serie'=>$numevoNumeroSerie,
		            'serie'=>$numeroActual['Serie']['serie'],'numero'=>$numevoNumero);
	}
	
	/**
	 * Incrementa el en uno el numero enviado y lo retorna en la longitud deseada
	 * @return 
	 * @param $numero Object
	 * @param $logitudNumero Object
	 */
	function incrementarNumeracion($numero, $logitudNumero){
		$numero = (int)$numero + 1;
		return $this->formarNumero($numero, $logitudNumero);	
	}
	
	/**
	 * Aventura: agrega la cantidad de ceros necesarios para formar el numero
	 * @param object $numero
	 * @param object $logitudNumero
	 * @return 
	 */
	function formarNumero($numero, $logitudNumero){
		$longitudNro = (int)strlen($numero);
		while(($logitudNumero-$longitudNro) > 0){
			$numero = '0'.$numero;
			++$longitudNro;
		}
		return $numero;	
	}
}